package com.example.service;

import com.example.dto.RiskIndicatorDTO;
import com.example.dto.RiskIndicatorQuery;
import com.example.model.RiskIndicator;

import java.util.List;
import java.util.Optional;

/**
 * 风控指标服务接口
 */
public interface RiskIndicatorService {

    /**
     * 保存风控指标
     *
     * @param indicatorDTO 风控指标DTO
     * @return 保存后的风控指标
     */
    RiskIndicatorDTO saveIndicator(RiskIndicatorDTO indicatorDTO);

    /**
     * 批量保存风控指标
     *
     * @param indicatorDTOs 风控指标DTO列表
     * @return 保存后的风控指标列表
     */
    List<RiskIndicatorDTO> saveIndicators(List<RiskIndicatorDTO> indicatorDTOs);

    /**
     * 根据ID查询风控指标
     *
     * @param id 指标ID
     * @return 风控指标
     */
    Optional<RiskIndicatorDTO> findById(String id);

    /**
     * 根据用户ID查询风控指标
     *
     * @param userId 用户ID
     * @return 风控指标列表
     */
    List<RiskIndicatorDTO> findByUserId(String userId);

    /**
     * 根据查询条件查询风控指标
     *
     * @param query 查询条件
     * @return 风控指标列表
     */
    List<RiskIndicatorDTO> findByQuery(RiskIndicatorQuery query);

    /**
     * 计算用户风控指标
     *
     * @param userId 用户ID
     * @param indicatorType 指标类型
     * @return 计算后的风控指标
     */
    RiskIndicatorDTO calculateIndicator(String userId, String indicatorType);

    /**
     * 批量计算用户风控指标
     *
     * @param userIds 用户ID列表
     * @param indicatorType 指标类型
     * @return 计算后的风控指标列表
     */
    List<RiskIndicatorDTO> calculateIndicators(List<String> userIds, String indicatorType);

    /**
     * 删除风控指标
     *
     * @param id 指标ID
     */
    void deleteIndicator(String id);

    /**
     * 删除用户的所有风控指标
     *
     * @param userId 用户ID
     */
    void deleteUserIndicators(String userId);

    /**
     * 根据条件删除风控指标
     *
     * @param query 查询条件
     * @return 删除的记录数
     */
    long deleteByQuery(RiskIndicatorQuery query);
}